/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.com.cotelasa.scp.controlador;

import java.io.Serializable;
import java.util.ArrayList;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import org.apache.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import pe.com.cotelasa.common.controlador.MBGenerico;
import pe.com.cotelasa.scp.common.IObserver;
import pe.com.cotelasa.scp.common.ISubject;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteAddFacturaNC;
import pe.com.cotelasa.scp.controlador.backingBean.BKComponenteAddVentaDetalleNC;
import pe.com.cotelasa.scp.dominio.common.TIPO_DOC_VENTA;
import pe.com.cotelasa.scp.dominio.excepcion.ServiceException;
import pe.com.cotelasa.scp.dominio.service.IServicioTipoDocumento;
import pe.com.cotelasa.scp.dominio.service.IServicioVentaDetalleFacturacion;
import pe.com.cotelasa.scp.dominio.service.IServicioVentaFacturacion;
import pe.com.cotelasa.scp.entidad.TipoDocumento;
import pe.com.cotelasa.scp.entidad.VentaDetalleFacturacion;
import pe.com.cotelasa.scp.entidad.VentaFacturacion;
import pe.com.cotelasa.seguridad.controlador.backingBean.BKSession;

/**
 *
 * @author Jorge
 */
@SuppressWarnings("serial")
@Named(value = "MBComponenteAddFacturaNC")
@Scope("request")
public class MBComponenteAddFacturaNC extends MBGenerico implements ISubject, Serializable {

    private static Logger logger = Logger.getLogger(MBComponenteAddVentaDetalleNC.class);
    @Inject
    private BKComponenteAddFacturaNC bkComponenteAddFacturaNC;
    @Inject
    private IServicioVentaFacturacion servicioVentaFacturacion;
    @Inject
    private IServicioVentaDetalleFacturacion servicioVentaDetalleFacturacion;
    @Autowired
    BKSession session;

    public void cargaInicial(ActionEvent actionEvent) {
        bkComponenteAddFacturaNC.setListaFacturas(new ArrayList<VentaFacturacion>());
        bkComponenteAddFacturaNC.setListaDetalleFacturacion(new ArrayList<VentaDetalleFacturacion>());
        bkComponenteAddFacturaNC.setFacturaSeleccionado(null);
        bkComponenteAddFacturaNC.setFacturaDetalleSeleccionado(null);
        bkComponenteAddFacturaNC.setNumero("");
        bkComponenteAddFacturaNC.setRazon((String) actionEvent.getComponent().getAttributes().get("razon"));
        System.out.println("razon social: "+(String) actionEvent.getComponent().getAttributes().get("razon"));
    }

    public void buscarFacturas() {
        VentaFacturacion documento = new VentaFacturacion();
        documento.setRazon(bkComponenteAddFacturaNC.getRazon());
        documento.setRuc("") ;
        documento.setTipoCompago(TIPO_DOC_VENTA.FACTURA.getValor());
        documento.setSede(session.getSede());
        //String serie = bkComponenteAddFacturaNC.getSerie();
        
        documento.setNumFactura(bkComponenteAddFacturaNC.getNumero());
        System.out.println("setRazon: "+documento.getRazon());
        System.out.println("setNumFactura: "+documento.getNumFactura());
        System.out.println("setTipoCompago: "+documento.getTipoCompago());
        try {
            bkComponenteAddFacturaNC.setListaDetalleFacturacion(new ArrayList<VentaDetalleFacturacion>());
            bkComponenteAddFacturaNC.setListaFacturas(servicioVentaFacturacion.obtenerVentaFacturacionBusqueda(documento, null, null));
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al actualizar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }
    }

    public void buscarDetalleFacturas() {

        try {
            bkComponenteAddFacturaNC.setListaDetalleFacturacion(new ArrayList<VentaDetalleFacturacion>());
            bkComponenteAddFacturaNC.setListaDetalleFacturacion(servicioVentaDetalleFacturacion.obtenerVentaDetalleFacturacion(bkComponenteAddFacturaNC.getFacturaSeleccionado().getCoddocventa()));
        } catch (ServiceException e) {
            mostrarError("Ocurrieron algunos problemas al actualizar la informacion. Vuelva a intentar.");
            logger.error(e.getMessage(), e);
        }
    }

    public void clearObserver() {
        bkComponenteAddFacturaNC.getObservers().clear();
    }

    @Override
    public void addObserver(IObserver observador) {
        bkComponenteAddFacturaNC.addObservers(observador);
    }

    @Override
    public void notificarObservadores() {
        for (IObserver observer : bkComponenteAddFacturaNC.getObservers()) {
            observer.actualizarObservador(bkComponenteAddFacturaNC.getFacturaDetalleSeleccionado());
        }

    }
}
